﻿using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Media;

namespace DragResizeRotateItems
{
    public class DragThumb : Thumb
    {
        public DragThumb()
        {
            base.DragDelta += new DragDeltaEventHandler(DragThumb_DragDelta);
        }

        //void DragThumb_DragDelta(object sender, DragDeltaEventArgs e)
        //{
        //    ContentControl item = this.DataContext as ContentControl;

        //    if (item != null)
        //    {
        //        Point dragDelta = new Point(e.HorizontalChange, e.VerticalChange);

        //        RotateTransform rotateTransform = item.RenderTransform as RotateTransform;
        //        if (rotateTransform != null)
        //            dragDelta = rotateTransform.Transform(dragDelta);

        //        double left = Canvas.GetLeft(item);
        //        double top = Canvas.GetTop(item);

        //        left = double.IsNaN(left) ? 0 : left;
        //        top = double.IsNaN(top) ? 0 : top;

        //        Canvas.SetLeft(item, left + dragDelta.X);
        //        Canvas.SetTop(item, top + dragDelta.Y);
        //    }
        //}

        void DragThumb_DragDelta(object sender, DragDeltaEventArgs e)
        {
            ContentControl item = this.DataContext as ContentControl;

            if (item != null)
            {
                Point dragDelta = new Point(e.HorizontalChange, e.VerticalChange);

                RotateTransform rotateTransform = item.RenderTransform as RotateTransform;
                if (rotateTransform != null)
                    dragDelta = rotateTransform.Transform(dragDelta);

                double left = Canvas.GetLeft(item);
                double top = Canvas.GetTop(item);

                left = double.IsNaN(left) ? 0 : left;
                top = double.IsNaN(top) ? 0 : top;

                Canvas.SetLeft(item, left + dragDelta.X);
                Canvas.SetTop(item, top + dragDelta.Y);
            }
        }
    }
}
